<?php

class InstrumentController extends Controller
{
    public $chooseName = 'Instrument Manage';
	/**
	 * @var string the default layout for the views. Defaults to '//layouts/column2', meaning
	 * using two-column layout. See 'protected/views/layouts/column2.php'.
	 */
	public $layout='//layouts/column3';

	/**
	 * @return array action filters
	 */
	public function filters()
	{
		return array(
			'accessControl', // perform access control for CRUD operations
			'postOnly + delete', // we only allow deletion via POST request
		);
	}

	/**
	 * Specifies the access control rules.
	 * This method is used by the 'accessControl' filter.
	 * @return array access control rules
	 */
	/*public function accessRules()
	{
		return array(
			array('allow',  // allow all users to perform 'index' and 'view' actions
				'actions'=>array('index','view'),
				'users'=>array('*'),
			),
			array('allow', // allow authenticated user to perform 'create' and 'update' actions
				'actions'=>array('create','update'),
				'users'=>array('@'),
			),
			array('allow', // allow admin user to perform 'admin' and 'delete' actions
				'actions'=>array('admin','delete'),
				'users'=>array('admin'),
			),
			array('deny',  // deny all users
				'users'=>array('*'),
			),
        );
    }*/

	/**
	 * Displays a particular model.
	 * @param integer $id the ID of the model to be displayed
	 */
	public function actionView($id)
    {
        if(isset($_POST['submitPass']))
        {
            $reserveList = $_POST['select'];
            foreach($reserveList as $elem)
            {
                $elem = InstrumentReserve::model()->findByPk($elem);
                $modelElem = InstrumentElem::getIdleMachines($elem->start_date, $elem->instrument_id);
                if($modelElem === null)
                {
                    InstrumentReserve::model()->updateByPk($elem->reserve_id,
                        array(
                            'status'=>InstrumentReserve::STATUS_MAX_EXAMINE,
                        ));
                }
                else
                {
                    InstrumentReserve::model()->updateByPk($elem->reserve_id,
                        array(
                            'elem_id'=>$modelElem->elem_id,
                            'status'=>InstrumentReserve::STATUS_PASS_EXAMINE,
                        ));
                }
            }
        }

        if(isset($_POST['submitRefuse']))
        {
            $reserveList = $_POST['select'];
            foreach($reserveList as $elem)
            {
                $elem = InstrumentReserve::model()->findByPk($elem);
                    InstrumentReserve::model()->updateByPk($elem->reserve_id,
                        array(
                            'status'=>InstrumentReserve::STATUS_REFUSE_EXAMINE,
                        ));
            }
 
        }
 
        $modelElem=new InstrumentElem('search');
        $modelElem->unsetAttributes();  // clear any default values
        if(isset($_GET['InstrumentElem']))
            $modelElem->attributes=$_GET['InstrumentElem'];

        $modelDate=new InstrumentDate('search');
        $modelDate->unsetAttributes();  // clear any default values
        if(isset($_GET['InstrumentDate']))
            $modelDate->attributes=$_GET['InstrumentDate'];

        $modelInfo=new InstrumentReserve('search');
        $modelInfo->unsetAttributes();  // clear any default values
        if(isset($_GET['InstrumentReserve']))
            $modelInfo->attributes=$_GET['InstrumentReserve'];

       //生成时间表
        $dateTable = InstrumentDate::GenerateDateTableByID($id);
        $dateTableInfo = InstrumentDate::GenerateReserveDateTableByID($id);

        $this->render('view',array(
            'model'=>$this->loadModel($id),
            'modelElem'=>$modelElem,
            'modelDate'=>$modelDate,
            'modelInfo'=>$modelInfo,
            'dateTable'=>$dateTable,
            'dateTableInfo'=>$dateTableInfo,
		));
	}

	/**
	 * Creates a new model.
	 * If creation is successful, the browser will be redirected to the 'view' page.
	 */
	public function actionCreate()
	{
		$model=new Instrument;

		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);

		if(isset($_POST['Instrument']))
		{
			$model->attributes=$_POST['Instrument'];
            if(!empty($_FILES['imageFile']['name']))
            {
                $modelFile = new Resources;
                $rid = $modelFile->uploadReturnID('imageFile',yii::app()->params['upload_instrument'],false);
                $model->resources_id = $rid;
            }
			if($model->save())
				$this->redirect(array('view','id'=>$model->instrument_id));
		}

		$this->render('create',array(
			'model'=>$model,
		));
	}

	/**
	 * Updates a particular model.
	 * If update is successful, the browser will be redirected to the 'view' page.
	 * @param integer $id the ID of the model to be updated
	 */
	public function actionUpdate($id)
	{
		$model=$this->loadModel($id);

		// Uncomment the following line if AJAX validation is needed
		// $this->performAjaxValidation($model);

		if(isset($_POST['Instrument']))
		{
			$model->attributes=$_POST['Instrument'];
            if(!empty($_FILES['imageFile']['name']))
            {
                if($model->resources != null)
                {
                    $model->resources->deleteRealResources();
                    $model->resources->delete();
                }
                $modelFile = new Resources;
                $rid = $modelFile->uploadReturnID('imageFile',yii::app()->params['upload_instrument'],false);
                $model->resources_id = $rid;
            }
			if($model->save())
				$this->redirect(array('view','id'=>$model->instrument_id));
		}

		$this->render('update',array(
			'model'=>$model,
		));
	}

	/**
	 * Deletes a particular model.
	 * If deletion is successful, the browser will be redirected to the 'admin' page.
	 * @param integer $id the ID of the model to be deleted
	 */
	public function actionDelete($id)
	{
		$this->loadModel($id)->delete();

		// if AJAX request (triggered by deletion via admin grid view), we should not redirect the browser
		if(!isset($_GET['ajax']))
			$this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('admin'));
	}

	/**
	 * Lists all models.
	 */
	public function actionIndex()
	{
		$dataProvider=new CActiveDataProvider('Instrument');
		$this->render('index',array(
			'dataProvider'=>$dataProvider,
		));
	}

	/**
	 * Manages all models.
	 */
	public function actionAdmin()
	{
		$model=new Instrument('search');
		$model->unsetAttributes();  // clear any default values
		if(isset($_GET['Instrument']))
			$model->attributes=$_GET['Instrument'];

		$this->render('admin',array(
			'model'=>$model,
		));
	}

	/**
	 * Returns the data model based on the primary key given in the GET variable.
	 * If the data model is not found, an HTTP exception will be raised.
	 * @param integer $id the ID of the model to be loaded
	 * @return Instrument the loaded model
	 * @throws CHttpException
	 */
	public function loadModel($id)
	{
		$model=Instrument::model()->findByPk($id);
		if($model===null)
			throw new CHttpException(404,'The requested page does not exist.');
		return $model;
	}

	/**
	 * Performs the AJAX validation.
	 * @param Instrument $model the model to be validated
	 */
	protected function performAjaxValidation($model)
	{
		if(isset($_POST['ajax']) && $_POST['ajax']==='instrument-form')
		{
			echo CActiveForm::validate($model);
			Yii::app()->end();
		}
	}
    /**
     * =======================================================
     *               仪器管理
     * =======================================================
     */
    public function actionViewElem($id)
    {
        $this->render('viewElem',array(
            'model'=>$this->loadElemModel($id),
        ));
    }
    public function actionCreateElem($iid)
    {
        $model=new InstrumentElem;
        if(isset($_POST['InstrumentElem']))
        {
            $model->attributes = $_POST['InstrumentElem'];
            $model->instrument_id = $iid;
            if($model->save())
            {
                $stock = $model->instrument->stock;
                $totalStock = $model->instrument->total_stock;
                if($model->status == InstrumentElem::STATUS_ACTIVE)
                {
                    $stock++;
                }
                $totalStock++;
                Instrument::model()->updateByPk($model->instrument->instrument_id,
                    array(
                        'stock'=>$stock,
                        'total_stock'=>$totalStock,
                    ));
                $this->redirect(array('viewElem','id'=>$model->elem_id));
            }
        }

        $this->render('createElem',array(
            'model'=>$model,
            'instrumentModel'=>$this->loadModel($iid),
        ));
    }
    public function actionUpdateElem($id)
    {
        $model=$this->loadElemModel($id);
        if(isset($_POST['InstrumentElem']))
        {
            $before = $model->status;
            $model->attributes=$_POST['InstrumentElem'];
            if($model->save())
            {
                $stock = $model->instrument->stock;
                if($model->status == InstrumentElem::STATUS_ACTIVE && $model->status != $before)
                {
                    $stock++;
                }
                else if($model->status == InstrumentElem::STATUS_DEACTIVE && $model->status != $before)
                {
                    $stock--;
                }
                Instrument::model()->updateByPk($model->instrument->instrument_id,
                    array(
                        'stock'=>$stock,
                    ));
                $this->redirect(array('viewElem','id'=>$model->elem_id));
            }
        }

        $this->render('updateElem',array(
            'model'=>$model,
        ));
    }
    public function actionDeleteElem($id)
    {
        $model = $this->loadElemModel($id);
        $stock = $model->instrument->stock;
        $totalStock = $model->instrument->total_stock;
        $stock--;
        $totalStock--;
        Instrument::model()->updateByPk($model->instrument->instrument_id,
            array(
                'stock'=>$stock,
                'total_stock'=>$totalStock,
            ));
        $iid = $model->instrument_id;
        $model->delete();
        if(!isset($_GET['ajax']))
            $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('view','id'=>$iid));
    }
    public function loadElemModel($id)
    {
        $model=InstrumentElem::model()->findByPk($id);
        if($model===null)
            throw new CHttpException(404,'The requested page does not exist.');
        return $model;
    }
    /**
     * =======================================================
     *               预约时间表管理
     * =======================================================
     */
    public function actionViewDate($id)
    {
        $model = $this->loadDateModel($id);
        $model->start_time = date('H', strtotime($model->start_date));
        $model->end_time = date('H', strtotime($model->end_date));
        $model->start_date = date('Y-m-d', strtotime($model->start_date));
        $model->end_date = date('Y-m-d', strtotime($model->end_date));

        $this->render('viewDate',array(
            'model'=>$model,
        ));
    }
    public function actionCreateDate($iid)
    {
        $model=new InstrumentDate;
        if(isset($_POST['InstrumentDate']))
        {
            $model->attributes = $_POST['InstrumentDate'];
            $model->start_date = trim($model->start_date);
            $model->end_date = trim($model->end_date);
            $model->start_time = trim($_POST['InstrumentDate']['start_time']);
            $model->end_time = trim($_POST['InstrumentDate']['end_time']);
		    $start = CDateTimeParser::parse($model->start_date,'yyyy-MM-dd');
		    $end = CDateTimeParser::parse($model->end_date,'yyyy-MM-dd');
            if($model->end_time < 0 || $model->end_time > 23 || $model->start_time < 0 || $model->start_time > 23)
            {
                echo "<script>alert(\"输入时间不符合要求(0~23)。\")</script>";
                echo "<script>history.go(-1)</script>";
                exit;
            }
            if($end < $start)
            {
                echo "<script>alert(\"输入日期不符合要求(开始日期要小于或等于结束日期)。\")</script>";
                echo "<script>history.go(-1)</script>";
                exit;
            }
            if($model->end_time <= $model->start_time && $model->end_time != 0)
            {
                echo "<script>alert(\"输入时间不符合要求(开始的时间要小于结束时间)。\")</script>";
                echo "<script>history.go(-1)</script>";
                exit;
            }
            $model->start_date = $model->start_date.' '.$model->start_time;
            $model->end_date = $model->end_date.' '.$model->end_time;
            $model->instrument_id = $iid;
            if($model->save())
            {
               $this->redirect(array('viewDate','id'=>$model->date_id));
            }
        }

        $this->render('createDate',array(
            'model'=>$model,
            'instrumentModel'=>$this->loadModel($iid),
        ));
    }
    public function actionUpdateDate($id)
    {
        $model=$this->loadDateModel($id);
        if(isset($_POST['InstrumentDate']))
        {
            $model->attributes = $_POST['InstrumentDate'];
            $model->start_date = trim($model->start_date);
            $model->end_date = trim($model->end_date);
            $model->start_time = trim($_POST['InstrumentDate']['start_time']);
            $model->end_time = trim($_POST['InstrumentDate']['end_time']);
		    $start = CDateTimeParser::parse($model->start_date,'yyyy-MM-dd');
		    $end = CDateTimeParser::parse($model->end_date,'yyyy-MM-dd');
            if($model->end_time < 0 || $model->end_time > 23 || $model->start_time < 0 || $model->start_time > 23)
            {
                echo "<script>alert(\"输入时间不符合要求(0~23)。\")</script>";
                echo "<script>history.go(-1)</script>";
                exit;
            }
            if($end < $start)
            {
                echo "<script>alert(\"输入日期不符合要求(开始日期要小于或等于结束日期)。\")</script>";
                echo "<script>history.go(-1)</script>";
                exit;
            }
            if($model->end_time <= $model->start_time && $model->end_time != 0)
            {
                echo "<script>alert(\"输入时间不符合要求(开始的时间要小于结束时间)。\")</script>";
                echo "<script>history.go(-1)</script>";
                exit;
            }
            $model->start_date = $model->start_date.' '.$model->start_time;
            $model->end_date = $model->end_date.' '.$model->end_time;
            if($model->save())
            {
               $this->redirect(array('viewDate','id'=>$model->date_id));
            }
        }
        $model->start_time = date('H', strtotime($model->start_date));
        $model->end_time = date('H', strtotime($model->end_date));
        $model->start_date = date('Y-m-d', strtotime($model->start_date));
        $model->end_date = date('Y-m-d', strtotime($model->end_date));

        $this->render('updateDate',array(
            'model'=>$model,
        ));
    }
    public function actionDeleteDate($id)
    {
        $model = $this->loadDateModel($id);
        $iid = $model->instrument_id;
        $model->delete();
        if(!isset($_GET['ajax']))
            $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('view','id'=>$iid));
    }
    public function loadDateModel($id)
    {
        $model=InstrumentDate::model()->findByPk($id);
        if($model===null)
            throw new CHttpException(404,'The requested page does not exist.');
        return $model;
    }
    /**
     * =======================================================
     *               用户预约管理
     * =======================================================
     */
    public function actionDeleteReserve($id)
    {
        $model = $this->loadReserveModel($id);
        $iid = $model->getInstrumentID();
        $model->delete();
        if(!isset($_GET['ajax']))
            $this->redirect(isset($_POST['returnUrl']) ? $_POST['returnUrl'] : array('view','id'=>$iid));
    }
    public function loadReserveModel($id)
    {
        $model=InstrumentReserve::model()->findByPk($id);
        if($model===null)
            throw new CHttpException(404,'The requested page does not exist.');
        return $model;
    }
 
}
